package Algorithm_study.recursion_algorithm;

import java.util.Scanner;

/**
 * 用于计算大整数的乘法，将其拆解成为两部分，减少问题的量级！
 * @author YiWen Wan
 */
public class LargeIntegerMul {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入参与乘法的整数：");
        long X = scanner.nextLong();
        System.out.println("请输入参与乘法的另一个整数：");
        long Y = scanner.nextLong();
//        System.out.println("最终结果是："+IntegerMultiply(X,Y));
        scanner.close();
    }

//    /**
//     * 用于计算大整数的乘法。
//     * @param X：参与运算的其中一个大整数。
//     * @param Y：参与运算的另一个大整数。
//     * @return：返回计算的结果。
//     */
//    public static long IntegerMultiply(long X,long Y){
//        //表示其中的一个只是个位数了，所以不用再分解了！
//        if (digitsCalculation(X)==1||digitsCalculation(Y)==1)
//            return X*Y;
//        else{
//            int digits_X = (int)(digitsCalculation(X)/2);//记录下X位数的一半
//            int digits_Y = (int)(digitsCalculation(Y)/2);//记录下Y位数的一半
//            //对X进行分解
//            long head_X = X/digits_X;//前半部分
//            long low_X = X%digits_X;//后半部分
//            //对Y进行分解
//            long head_Y = Y/digits_Y;//前半部分
//            long low_Y = Y%digits_Y;//后半部分
//            return IntegerMultiply(head_X,head_Y)*(long)Math.pow(10,((int)(digits_X/2)+(int)(digits_Y/2)))+
//                    IntegerMultiply(head_X,low_Y)*(long)Math.pow(10,(int)(digits_X/2))+
//                    IntegerMultiply(low_X,head_Y)*(long)Math.pow(10,(int)(digits_Y/2))+
//                    IntegerMultiply(low_X,low_Y);
//        }
//    }
//    /**
//     * 用于计算数据的位数。
//     * @param data：待计算位数的数据。
//     * @return：返回计算出来的位数结果。
//     */
//    public static int digitsCalculation(long data){
//        long i = 1;//用于控制循环流程
//        int count = 1;//用于计算位数
//        while(i>=0){
//            i = data - (long)Math.pow(10,count);
//            count++;
//        }
//        return count-1;
//    }
}
